package net.jgrm.product.dubbo;

import net.jgrm.product.dto.ProductDTO;

import java.util.List;
import java.util.Map;

/**
 * 商品Dubbo服务接口
 * 用于定义商品服务的远程调用接口
 */
public interface ProductDubboService {

    /**
     * 根据ID查询商品
     *
     * @param id 商品ID
     * @return 商品信息
     */
    ProductDTO getProductById(Long id);

    /**
     * 扣减库存
     *
     * @param productId 商品ID
     * @param quantity  扣减数量
     * @return 是否扣减成功
     */
    boolean decreaseStock(Long productId, Integer quantity);

    /**
     * 批量查询商品信息
     *
     * @param productIds 商品ID列表
     * @return 商品信息列表
     */
    List<ProductDTO> getProductsByIds(List<Long> productIds);

    /**
     * 检查商品库存是否充足
     *
     * @param productId 商品ID
     * @param quantity  需要的数量
     * @return 是否库存充足
     */
    boolean checkStock(Long productId, Integer quantity);

    /**
     * 获取商品当前库存
     *
     * @param productId 商品ID
     * @return 当前库存数量
     */
    Integer getCurrentStock(Long productId);

    /**
     * 批量检查商品库存
     *
     * @param stockCheckMap 商品ID和需要数量的映射
     * @return 商品ID和库存检查结果的映射
     */
    Map<Long, Boolean> batchCheckStock(Map<Long, Integer> stockCheckMap);
}